package com.itheima.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.itheima.dao.OrderSettingDao;
import com.itheima.pojo.OrderSetting;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author 黑马程序员
 * @Company http://www.ithiema.com
 * @Version 1.0
 */
@Service
public class OrderSettingServiceImpl implements OrderSettingService {


    @Autowired
    OrderSettingDao orderSettingDao;


    /**
     * 步骤：
     *     1. 遍历集合
     *     2. 添加预约设置信息
     *          2.1 先查询该日期的预约设置信息
     *          2.2 如果有该预约设置信息， 更新
     *              2.2.1 判断已预约人数(数据库中查询)是否大于可预约人数（参数中的人数），如果大于，抛出异常
     *              2.2.2 如果小于可预约人数，直接修改
     *          2.1 如果没有该预约设置信息， 添加
     *
     *
     * @param orderSettingList
     */
    @Override
    @Transactional
    public void addOrderSettingList(List<OrderSetting> orderSettingList) {
        if(orderSettingList != null && orderSettingList.size() > 0 ){
            for (OrderSetting orderSetting : orderSettingList) {

                Date orderDate = orderSetting.getOrderDate();
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
                String orderDateStr = dateFormat.format(orderDate);

                //2.1 先查询该日期的预约设置信息
                OrderSetting orderSettingDb = orderSettingDao.findByOrderDate(orderDateStr);
                //2.1 如果有该预约设置信息， 更新
                if(orderSettingDb != null){
                    if(orderSettingDb.getReservations() > orderSetting.getNumber()){
                        throw  new RuntimeException("["+orderDateStr+ "]可预约必须大于已预约人数！！");
                    }else{
                        orderSettingDao.edit(orderSetting);
                    }
                }
                //2.2 如果没有该预约设置信息， 添加
                else{
                    orderSettingDao.add(orderSetting);
                }

            }
        }
    }

    /**
     * 查询指定月份的预约设置信息
     *      指定月份的1号，到最后一天
     * @param month
     * @return
     */
    @Override
    public List<OrderSetting> findByMonth(String month) {
        String startDate = month + "-01";
        String endDate = month + "-31";

        Map<String,Object> map = new HashMap<>();
        map.put("startDate", startDate);
        map.put("endDate", endDate);

        return  orderSettingDao.findByMonth(map);
    }

    @Override
    public void delete(String day) {
        orderSettingDao.delete(day);
    }

}
